package cn.com;

import java.util.Arrays;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
//import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.ProviderManager;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;

import cn.com.datasource.DynamicDataSourceRegister;

/**
 * @author liufl E-mail:Huberier@allpyra.com
 * @version 创建时间：2017年7月18日 下午3:07:36
 * 一定要放到所有文件夹的最外层（不能直接main/java，起码有一层包），不然扫描不到其他的controller，各种mapping就失效了！！！
 * 运行一个打包的程序并开启远程调试支持是可能的，这允许你将调试器附加到打包的应用程序上：
	java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8080,suspend=n \
   		-jar target/test-0.0.1-SNAPSHOT.jar
 */
@SpringBootApplication
@EnableAsync//启用异步支持
@EnableAuthorizationServer
@Import({DynamicDataSourceRegister.class})//注册多数据源
public class OAuth2Application {
    
    public static String uaserName = "admin"; 

	/**
	 * Async同步执行任务（相互没有因果关系）
	 * 
	 * 服务器——http://localhost:9008;;客户端——http://localhost:9009;;请求授权资源——http://localhost:9009/hello
	 * 1、客户端请求服务器授权：http://localhost:9008/oauth/authorize?client_id=admin&redirect_uri=http://localhost:9009/hello2&response_type=code&scope=read
	 * 2、服务器提示登录（默认 admin admin），然后用户确认授权获取头像等信息，服务器在用户同意授权后返回客户端code
	 * 3、客户端根据服务器返回的code发送<<POST>>请求获取授权token:
	 * 	  http://localhost:9008/oauth/token?code=g6hW13&client_id=admin&client_secret=s1&grant_type=authorization_code&redirect_uri=http://localhost:9009/hello2
	 * 4、获取到授权token后根据token访问授权资源：http://localhost:8080/appDemo/resource/getUserInfo?access_token=68df2aed-a84d-4f8e-b3d6-2520c4c6222e
	 * 
	 * 具体操作见spring-cloud-oauth2-client的RemoteResourceApplication
	 */
    public static void main(String[] args) {
        SpringApplication.run(OAuth2Application.class, args);
    }

    @Autowired
    private AuthenticationProvider authenticationProvider;

    @Bean
    public AuthenticationManager authenticationManager() {
        return new ProviderManager(Arrays.asList(authenticationProvider));
    }

}


